package parser

import (
	"parse/src/token"
)

// 语法分析器
type Parser struct {
	Tokens     []token.Token // 需要解析的token
	TokIdx     int           // token当前解析到的位置
	CurrentTok *token.Token
	// 当前的token
}
// 实例化
func New(tokens []token.Token)  *Parser{
	// 初始化
	p := &Parser{
		Tokens: tokens,
		TokIdx: -1,
	}
	// 向前走一步
	p.Advance()
	return p
}
// 向前走一步
func (p *Parser) Advance() *token.Token {
	p.TokIdx++
	// 更新当前的token
	p.UpdateCurrentTok()
	return p.CurrentTok
}
// 向后走 amount 步
func (p *Parser) Reverse(amount int) *token.Token {
	p.TokIdx -= amount
	p.UpdateCurrentTok()
	return p.CurrentTok
}
// 更新当前的token
func (p *Parser) UpdateCurrentTok() {
	// 表示是索引在token范围之内
	if p.TokIdx >=0 && p.TokIdx < len(p.Tokens) {
		// 表示的意思是cuttentTok更新为token
		p.CurrentTok = &p.Tokens[p.TokIdx]
	}
}
// 解析
func (p *Parser) Parse() *ParseResult  {
	// 得到解析的结果
	res := p.Statements()
	return res
}
